# uncomment to run, then recomment it out so you don't run it every time
# census_api_key("APIKEYCODE", install=TRUE)Georgia Income
Here, I chose the list of variables that I wanted to analyze.
myvars <- c(totalpop = "B01003_001",
medincome = "B19013_001",
medage = "B01002_001"
)Here, I pulled the list of counties in Georgia and a list of counties in the U.S.
all_counties_withgeo <- get_acs(geography = "county",
variables = c(myvars),
output = "wide",
geometry = TRUE)Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
all_counties_withgeoSimple feature collection with 3221 features and 8 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -179.1489 ymin: 17.88328 xmax: 179.7785 ymax: 71.36516
Geodetic CRS: NAD83
First 10 features:
GEOID NAME totalpopE totalpopM medincomeE
1 20161 Riley County, Kansas 72602 NA 53296
2 19159 Ringgold County, Iowa 4739 NA 57700
3 30009 Carbon County, Montana 10488 NA 63178
4 16007 Bear Lake County, Idaho 6327 NA 60337
5 55011 Buffalo County, Wisconsin 13314 NA 61167
6 31185 York County, Nebraska 14164 NA 66337
7 08037 Eagle County, Colorado 55693 NA 91338
8 42129 Westmoreland County, Pennsylvania 355107 NA 64708
9 40079 Le Flore County, Oklahoma 48436 NA 43049
10 48053 Burnet County, Texas 48424 NA 65363
medincomeM medageE medageM geometry
1 2489 25.5 0.1 MULTIPOLYGON (((-96.96095 3...
2 5058 44.3 1.0 MULTIPOLYGON (((-94.47167 4...
3 4261 50.7 0.9 MULTIPOLYGON (((-109.7987 4...
4 7039 38.9 1.1 MULTIPOLYGON (((-111.6345 4...
5 2352 46.5 0.5 MULTIPOLYGON (((-92.08384 4...
6 4128 39.5 1.2 MULTIPOLYGON (((-97.82629 4...
7 4058 37.8 0.8 MULTIPOLYGON (((-107.1137 3...
8 1350 47.1 0.2 MULTIPOLYGON (((-79.90487 4...
9 1869 38.8 0.3 MULTIPOLYGON (((-95.05996 3...
10 4694 44.7 0.3 MULTIPOLYGON (((-98.45924 3...
#remove MOE columns - they all end with "M"
ga_counties_withgeo <- ga_counties_withgeo %>%
select(-ends_with("M"))
ga_counties_withgeoSimple feature collection with 159 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -85.60516 ymin: 30.35785 xmax: -80.84038 ymax: 35.00124
Geodetic CRS: NAD83
First 10 features:
GEOID NAME totalpopE medincomeE medageE
1 13021 Bibb County, Georgia 156711 43862 36.2
2 13049 Charlton County, Georgia 12416 45494 40.6
3 13283 Treutlen County, Georgia 6410 35441 39.9
4 13309 Wheeler County, Georgia 7568 26776 33.6
5 13279 Toombs County, Georgia 26956 42975 37.8
6 13077 Coweta County, Georgia 144928 83486 38.9
7 13153 Houston County, Georgia 161177 70313 35.9
8 13183 Long County, Georgia 16398 52742 33.7
9 13163 Jefferson County, Georgia 15708 42238 40.5
10 13261 Sumter County, Georgia 29690 36687 37.0
geometry
1 MULTIPOLYGON (((-83.89192 3...
2 MULTIPOLYGON (((-82.4156 31...
3 MULTIPOLYGON (((-82.74762 3...
4 MULTIPOLYGON (((-82.93976 3...
5 MULTIPOLYGON (((-82.48038 3...
6 MULTIPOLYGON (((-85.0132 33...
7 MULTIPOLYGON (((-83.85685 3...
8 MULTIPOLYGON (((-81.98162 3...
9 MULTIPOLYGON (((-82.66192 3...
10 MULTIPOLYGON (((-84.44381 3...
#remove that trailing "E"
colnames(ga_counties_withgeo) <- sub("E$", "", colnames(ga_counties_withgeo)) # $ means end of string only
ga_counties_withgeoSimple feature collection with 159 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -85.60516 ymin: 30.35785 xmax: -80.84038 ymax: 35.00124
Geodetic CRS: NAD83
First 10 features:
GEOID NAM totalpop medincome medage
1 13021 Bibb County, Georgia 156711 43862 36.2
2 13049 Charlton County, Georgia 12416 45494 40.6
3 13283 Treutlen County, Georgia 6410 35441 39.9
4 13309 Wheeler County, Georgia 7568 26776 33.6
5 13279 Toombs County, Georgia 26956 42975 37.8
6 13077 Coweta County, Georgia 144928 83486 38.9
7 13153 Houston County, Georgia 161177 70313 35.9
8 13183 Long County, Georgia 16398 52742 33.7
9 13163 Jefferson County, Georgia 15708 42238 40.5
10 13261 Sumter County, Georgia 29690 36687 37.0
geometry
1 MULTIPOLYGON (((-83.89192 3...
2 MULTIPOLYGON (((-82.4156 31...
3 MULTIPOLYGON (((-82.74762 3...
4 MULTIPOLYGON (((-82.93976 3...
5 MULTIPOLYGON (((-82.48038 3...
6 MULTIPOLYGON (((-85.0132 33...
7 MULTIPOLYGON (((-83.85685 3...
8 MULTIPOLYGON (((-81.98162 3...
9 MULTIPOLYGON (((-82.66192 3...
10 MULTIPOLYGON (((-84.44381 3...
Here I mapped Georgia counties by income, using mapview.
mapview(ga_counties_withgeo, zcol = "medincome")Here I changed the colors of the map to be lighter using color brewer.
mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.
In the next two steps, I changed the darkness of the background.
mapviewOptions("basemaps.color.shuffle" = FALSE)# this changed the maps background from black to white
mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.
In the next two steps, I built two maps, side-by-side, with one displaying Georgia’s income demographics and the other displaying age demographics.
map_income <- mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.
map_age <- mapview(ga_counties_withgeo, zcol = "medage",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1)Warning: Found less unique colors (9) than unique zcol values (97)!
Interpolating color vector to match number of zcol values.
sync(map_income, map_age)In the following step, I added a slider feature to the maps, allowing both age and income to be displayed in one map, with an interactive slider allowing both demographics to be viewed.
map_income | map_agein the following step, I removed the legend blocking parts of the map.
mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1,
legend = FALSE,
label = FALSE,
popup = FALSE)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.
In the following step, I developed labels that would display as hover text.
mylabel <- glue::glue("{ga_counties_withgeo$NAM} {ga_counties_withgeo$medincome}")
mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1,
label = mylabel)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.
In the following three steps, I made the popups ineractive, only displaying the full values when clicked on.
mypopup <- glue::glue("<strong>{ga_counties_withgeo$NAM}</strong><br />
Total Population: {ga_counties_withgeo$totalpop}<br />
Median Income: {ga_counties_withgeo$medincome}") %>%
lapply(htmltools::HTML)
# mylabel <- glue::glue("{all_data$State} {all_data$PctChange10_20}%") %>%
# lapply(htmltools::HTML)head(mypopup)[[1]]
<strong>Bibb County, Georgia</strong><br />
Total Population: 156711<br />
Median Income: 43862
[[2]]
<strong>Charlton County, Georgia</strong><br />
Total Population: 12416<br />
Median Income: 45494
[[3]]
<strong>Treutlen County, Georgia</strong><br />
Total Population: 6410<br />
Median Income: 35441
[[4]]
<strong>Wheeler County, Georgia</strong><br />
Total Population: 7568<br />
Median Income: 26776
[[5]]
<strong>Toombs County, Georgia</strong><br />
Total Population: 26956<br />
Median Income: 42975
[[6]]
<strong>Coweta County, Georgia</strong><br />
Total Population: 144928<br />
Median Income: 83486
mapview(ga_counties_withgeo, zcol = "medincome",
col.regions = RColorBrewer::brewer.pal(9, "Greens"),
alpha.regions = 1,
popup = mypopup)Warning: Found less unique colors (9) than unique zcol values (159)!
Interpolating color vector to match number of zcol values.